package com.company.oa.document.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.company.oa.document.dto.DocumentDTO;
import com.company.oa.document.entity.Document;
import org.springframework.web.multipart.MultipartFile;

/**
 * 公文服务接口
 */
public interface DocumentService extends IService<Document> {
    /**
     * 分页查询公文列表
     *
     * @param page 页码
     * @param size 每页大小
     * @param document 查询条件
     * @return 公文列表
     */
    IPage<Document> getDocumentPage(int page, int size, Document document);

    /**
     * 查询待我审批的公文列表
     *
     * @param page 页码
     * @param size 每页大小
     * @param userId 用户ID
     * @return 公文列表
     */
    IPage<Document> getPendingApprovalPage(int page, int size, Long userId);

    /**
     * 查询我已审批的公文列表
     *
     * @param page 页码
     * @param size 每页大小
     * @param userId 用户ID
     * @return 公文列表
     */
    IPage<Document> getApprovedPage(int page, int size, Long userId);

    /**
     * 查询我创建的公文列表
     *
     * @param page 页码
     * @param size 每页大小
     * @param userId 用户ID
     * @return 公文列表
     */
    IPage<Document> getMyDocumentPage(int page, int size, Long userId);

    /**
     * 查询抄送给我的公文列表
     *
     * @param page 页码
     * @param size 每页大小
     * @param userId 用户ID
     * @return 公文列表
     */
    IPage<Document> getCcToMePage(int page, int size, Long userId);

    /**
     * 获取公文详情
     *
     * @param id 公文ID
     * @return 公文详情
     */
    Document getDocumentDetail(Long id);

    /**
     * 创建公文
     *
     * @param documentDTO 公文信息
     * @return 是否成功
     */
    boolean createDocument(DocumentDTO documentDTO);

    /**
     * 更新公文
     *
     * @param documentDTO 公文信息
     * @return 是否成功
     */
    boolean updateDocument(DocumentDTO documentDTO);

    /**
     * 删除公文
     *
     * @param id 公文ID
     * @return 是否成功
     */
    boolean deleteDocument(Long id);

    /**
     * 提交公文审批
     *
     * @param id 公文ID
     * @return 是否成功
     */
    boolean submitDocument(Long id);

    /**
     * 归档公文
     *
     * @param id 公文ID
     * @return 是否成功
     */
    boolean archiveDocument(Long id);

    /**
     * 上传附件
     *
     * @param file 附件文件
     * @param documentId 公文ID
     * @param uploaderId 上传人ID
     * @param uploaderName 上传人姓名
     * @return 附件ID
     */
    Long uploadAttachment(MultipartFile file, Long documentId, Long uploaderId, String uploaderName);

    /**
     * 删除附件
     *
     * @param id 附件ID
     * @return 是否成功
     */
    boolean deleteAttachment(Long id);

    /**
     * 获取公文统计数据
     *
     * @param userId 用户ID
     * @return 统计数据
     */
    java.util.Map<String, Object> getDocumentStatistics(Long userId);
} 